export type StateType = {
  /** 数据源 */
  dataSource: string;
  /** 提取的数据 */
  extractData: string;
  /** 公共的文件数据 */
  commonFileData: string;
  /** 数据提取表达式 */
  extractExpression: string;
  /** 模板 */
  template: [];
  /**
   * tab的值
   * - dataSource: 数据源
   * - extractData: 提取的数据
   * - commonFileData: 公共的文件数据
   * - template: 模板数据
   */
  tabActiveName: "dataSource" | "extractData" | "commonFileData" | "template";
  /** 按钮 loading */
  loading: boolean;
  /** dialog显示/隐藏 */
  dialogVisible: boolean;

  /** 本地保存的所有模板 */
  templates: TemplateType[];
  /** 当前选中的模板 */
  templateActive: TemplateType;
  /** 测试的文件内容 */
  testFileContent: string;

  /** 当前编辑的模板名称 */
  newTemplateName: string;
};

export type TemplateType = {
  /** 模板名称 */
  name: string;
  /** 旧的名称 */
  oldName: string;
  /** 模板内容 */
  value: string;
  /** 是否是输入状态 */
  isInput: boolean;
};

type ExprFnParamsType = {
  // 父级的数据
  parent: any;
  // 当前的数据
  currData: any;
  // 索引
  index: number;
};

export type ExprType = {
  /** 数据的子列表 key */
  childrenKey?: string;
  /** 获取数据函数, 返回什么则收集什么 */
  getData?: (opt: ExprFnParamsType) => any;
  /** 过滤数据函数, 返回 true, 则调用 getData 进行收集数据  */
  filter?: (opt: ExprFnParamsType) => boolean;
  /** 需要删除的值key */
  deletekKeyData?: string[];
};

export type Menu = {
  type: string;
  href: string;
  name: string;
  children?: Menu[];
};
